/*******************************************************************************
* Copyright (c) 2011 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.jface.internal.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.NotSerializableException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import junit.framework.TestCase;
public class SerializableEventManagerTest extends TestCase {
private static class TestEventManager extends SerializableEventManager {
private static final long serialVersionUID = 1L;
void addListener(Object listener) {
addListenerObject(listener);
}
Object getListener(int index) {
return getListeners()[index];
}
}
public void testSerializeWithSerializableListeners() throws Exception {
String listener = "listener";
TestEventManager eventManager = new TestEventManager();
eventManager.addListener(listener);
TestEventManager deserializedEventManager = (TestEventManager) serializeAndDeserialize(eventManager);
assertEquals( listener, deserializedEventManager.getListener(0));
}
public void testSerializeWithNonSerializableListeners() throws Exception {
Object listener = new Object();
TestEventManager eventManager = new TestEventManager();
eventManager.addListener(listener);
try {
serialize(eventManager);
fail();
} catch (NotSerializableException expected) {
}
}
private Object serializeAndDeserialize(Serializable object)
throws Exception {
byte[] bytes = serialize(object);
return deserialize(bytes);
}
private static byte[] serialize(Object object) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
outputStream);
objectOutputStream.writeObject(object);
return outputStream.toByteArray();
}
private static Object deserialize(byte[] bytes) throws Exception {
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
return objectInputStream.readObject();
}
}